//////////////////////////////////////////////////////////////////////////
#pragma once
#pragma managed
//////////////////////////////////////////////////////////////////////////
NAMESPACE_BEGIN
//////////////////////////////////////////////////////////////////////////
public enum class MLVariableType
{
	Numerical = CV_VAR_NUMERICAL,
	Ordered = CV_VAR_ORDERED,
	Categorical = CV_VAR_CATEGORICAL,
};

public enum class MlErrorType
{
	Train = CV_TRAIN_ERROR,
	Test = CV_TEST_ERROR,
};

public enum class SampleFlag
{
	/* columns of <trainData> matrix are training samples */
	Row = CV_ROW_SAMPLE,
	/* rows of <trainData> matrix are training samples */
	Col = CV_COL_SAMPLE,
};

// SVM type
public enum class SVMType
{ 
	C_SVC = CvSVM::C_SVC, 
	NU_SVC = CvSVM::NU_SVC, 
	ONE_CLASS = CvSVM::ONE_CLASS, 
	EPS_SVR = CvSVM::EPS_SVR, 
	NU_SVR = CvSVM::NU_SVR,
};

// SVM kernel type
public enum class SVMKernelType
{
	Linear = CvSVM::LINEAR, 
	Poly = CvSVM::POLY, 
	RBF = CvSVM::RBF, 
	Sigmoid = CvSVM::SIGMOID,
};

// SVM params type
public enum class SVMParamsType
{ 
	C = CvSVM::C, 
	Gamma = CvSVM::GAMMA, 
	P = CvSVM::P, 
	NU = CvSVM::NU, 
	Coef = CvSVM::COEF, 
	Degree = CvSVM::DEGREE,
};

// Type of covariation matrices
public enum class EMCovMatType
{ 
	Spherical = CvEM::COV_MAT_SPHERICAL, 
	Diagonal = CvEM::COV_MAT_DIAGONAL, 
	Generic = CvEM::COV_MAT_GENERIC,
};

// The initial step
public enum class EMInitialStep
{
	E = CvEM::START_E_STEP, 
	M = CvEM::START_M_STEP, 
	Auto = CvEM::START_AUTO_STEP, 
};

// Boosting type
public enum class BoostType
{
	Discrete = CvBoost::DISCRETE, 
	Real = CvBoost::REAL, 
	Logit = CvBoost::LOGIT, 
	Gentle = CvBoost::GENTLE,
};

// Splitting criteria
public enum class BoostSplitCriteriaType
{
	Default = CvBoost::DEFAULT, 
	Gini = CvBoost::GINI, 
	Misclass = CvBoost::MISCLASS, 
	Sqerr = CvBoost::SQERR,
};

public enum class ANNTrainMethod
{
	BackProp = CvANN_MLP_TrainParams::BACKPROP, 
	RProp = CvANN_MLP_TrainParams::RPROP,
};

// possible activation functions
public enum class ANNActivationFunction
{
	Identity = CvANN_MLP::IDENTITY, 
	SigmoidSym = CvANN_MLP::SIGMOID_SYM, 
	Gaussian = CvANN_MLP::GAUSSIAN,
};

// available training flags
public enum class ANNTrainFlag
{
	UpdateWeights = CvANN_MLP::UPDATE_WEIGHTS,
	NoInput_Scale = CvANN_MLP::NO_INPUT_SCALE,
	NoOutput_Scale = CvANN_MLP::NO_OUTPUT_SCALE,
};

public enum class MLTestsetType
{
	ConcentricSpheres = CV_TS_CONCENTRIC_SPHERES,
};

public enum class MLTrainTestPartMode
{
	Count = CV_COUNT,
	Portion = CV_PORTION,
};
//////////////////////////////////////////////////////////////////////////
NAMESPACE_END
//////////////////////////////////////////////////////////////////////////